package com.itany.corejava.code06_面向对象.bms;

import java.util.Scanner;

/**
 * @author MissChen
 * @date 2024年02月26日 10:15
 */
public class Start {
    private Scanner sc=new Scanner(System.in);

    public static void main(String[] args) {
        new Start().showMenu();
    }
    public void showMenu(){
        System.out.println("---------------欢迎进入银行系统------------------");
        System.out.print("请选择服务的功能(1.开户 2.登录)");
        int choice=sc.nextInt();
        switch (choice){
            case 1:
                register();
                break;
            case 2:
                login();
                break;
        }
    }

    //开户
    public void register(){
        System.out.print("请选择开户的账户类型:（1.储蓄账户 2.信用账户 3.贷款的储蓄账户 4.贷款的信用账户）");
        int choice=sc.nextInt();
        Account account=null;
        // 根据账户类型不同，实例化不同的子类
        // 在实例化子类的时候账户编号需要自增
        // 在父类无参构造方法中已经实现了账户编号自增
        // 实例化的时候直接调用子类的无参构造方法
        // 此时自动调用到父类的无参构造方法，使得账户编号自增

        switch (choice){
            case 1:
                account=new SavingAccount();
                break;
            case 2:
                account=new CreditAccount();
                break;
            case 3:
                account=new LoanSavingAccount();
                break;
            case 4:
                account=new LoanCreditAccount();
                break;
        }
        //输入用户信息
        System.out.print("请输入户主姓名:");
        account.setName(sc.next());

        //密码输入2次，两次密码一致
        while(true){
            System.out.print("请输入密码:");
            String password=sc.next();
            System.out.print("请再次输入密码:");
            String password2=sc.next();
            if(password.equals(password2)){
                //如果两次密码一致，则设置密码
                account.setPassword(password);

                //跳出循环
                break;
            }else{
                System.out.println("错误:两次密码输入不一致，请重新输入");
            }
        }

        System.out.print("请输入您的身份证号码:");
        account.setPersonId(sc.next());
        System.out.print("请输入您的手机号码:");
        account.setPhone(sc.next());

        // 开户的时候，余额为0即可
        // 如果是信用账户，设置可透支额度
        System.out.println(account instanceof CreditAccount);
        if(account instanceof  CreditAccount){
            // 如果可以向下转型，说明当前账户是一个信用账户或者贷款的信用账户
            CreditAccount creditAccount= (CreditAccount) account;
            System.out.print("请输入可透支额度:");
            creditAccount.setLimit(sc.nextDouble());
        }

        boolean flag=Bank.register(account);
        if(flag){
            //如果成功
            System.out.println("提示：恭喜您，开户成功,您的账号为:"+account.getId());
        }else{
            System.out.println("错误:对不起，您开户失败了");
        }

        showMenu();
    }

    //登录
    public void login(){
        //输入账号编号
        System.out.print("请输入账号编号:");
        int id=sc.nextInt();
        //输入账户密码
        System.out.print("请输入账号密码:");
        String password=sc.next();

        //调用银行类提供的登录方法，返回登录的账户信息
        Account account=Bank.login(id,password);
        if(account!=null){
            //登录成功之后
            System.out.println("欢迎您:"+account.getName());
            new AccountMenu(account).showMainMenu();
        }else{
            //否则登录失败
            System.out.println("错误:卡号或者密码错误!");
            showMenu();
        }

    }


}
